//package leetcode.editor.cn.hashmap;
//
//public class HashMap<K,V> implements Map<K,V> {
//
//    Entry[] table = null;
//    int size = 0;
//
//    public HashMap() {
//        table = new Entry[16];
//    }
//
//   class Entry<K,V> implements Map.Entry<K,V> {
//        K k; V v; int index; Entry<K,V> next;
//
//       public Entry(K k, V v, int index, Entry<K, V> next) {
//           this.k = k;
//           this.v = v;
//           this.index = index;
//           this.next = next;
//       }
//
//       @Override
//       public K getKey() {
//           return k;
//       }
//
//       @Override
//       public V getValue() {
//           return v;
//       }
//   }
//    @Override
//    public V put(K k, V v) {
//        int index = hash(k);
//        Entry<K, V> entry = table[index];
//        if (entry == null) {
//            table[index] = new Entry<>(k, v, index, null);
//            size++;
//        } else {
//            table[index] = new Entry<>(k, v, index, entry);
//        }
//        return (V) table[index].getValue();
//    }
//
//    private int hash(K k) {
//        int index = k.hashCode() % 16;
//        return index >= 0 ? index : -index;
//    }
//
//    @Override
//    public V get(K k) {
//        int index = hash(k);
//        Entry<K, V> entry = findByValue(table[index], k);
//        return entry == null ? null : entry.getValue();
//    }
//
//    private Entry<K, V> findByValue(Entry entry, K k) {
//        if (k.equals(entry.getKey())) {
//            return entry;
//        } else {
//            if (entry.next != null) {
//                return findByValue(entry.next, k);
//            }
//        }
//        return null;
//    }
//
//    @Override
//    public int size() {
//        return 0;
//    }
//}
